package edu.tfh.s2.ehkbot.util;

import java.util.ArrayList;

/**
 * Die Subject Klasse für das Observer Pattern.
 * 
 * @author s2zehn
 */
public class Subject {

	/**
	 * Die Liste der Beobachter.
	 */
	private ArrayList<Observer> beobachter = new ArrayList<Observer>();

	private Object zustand = null;

	/**
	 * Fügt ein Observer/Beobachter zur Liste hinzu.
	 * 
	 * @param b
	 */
	public void attach(Observer b) {
		beobachter.add(b);
	}

	/**
	 * entfernt ein Observer/Beobachter aus der Liste.
	 * 
	 * @param b
	 */
	public void deattach(Observer b) {
		beobachter.remove(b);
	}

	/**
	 * Liefert den Status des Subject.
	 * 
	 * @return Der Status.
	 */
	public Object getState() {
		return zustand;
	}

	/**
	 * Informiert alle Beobachter.
	 */
	private void notifiy() {
		for (Observer b : beobachter)
			b.update();
	}

	/**
	 * Setzt neuen status und Informiert die Beobachter.
	 * 
	 * @param neu
	 *            Der neue status.
	 */
	public void setState(Object neu) {
		zustand = neu;
		notifiy();
	}

}
